package com.hspedu.qqserver.service;

import com.hspedu.qqcommon.Message;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author 吴宇~
 * @motto 我亦无他，唯手熟尔。
 * @edition jdk1.8
 * @reflection 0-1 喧闹任其喧闹，自由我自为之，我自风情万种，与世无争。
 * @date 2023/03/22/21:10
 */
//此类发送离线消息
public class SendOfflineMessage {
    //编写一个方法，通过id发送离线消息,逻辑是如果集合中有这个用户，则发送消息，后在集合中删除这个键值对，如果没有的话，不动
    public void SendOfflineMessage(String userId) {
        ConcurrentHashMap<String, Vector<Message>> offLineDB = QQServer.offLineDB;
        Iterator<String> iterator = offLineDB.keySet().iterator();
        while (iterator.hasNext()) {
            String offId = iterator.next();
            if (userId.equals(offId)&&(offLineDB.get(userId)!=null)){//如果集合中有这个id的话。就说明有人在离线时发送过消息，要做的是把这些消息全部发送，当然得遍历这个ArrayList集合
                Vector<Message> messages = offLineDB.get(offId);
                for (Message message : messages) {
                    ObjectOutputStream oos = null;
                    try {
                        oos = new ObjectOutputStream(MangerClientThreads.getServerConnectClientThread(userId).getSocket().getOutputStream());
                        oos.writeObject(message);

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                offLineDB.remove(userId);
            }
        }
    }
}
